package br.com.pesca.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private long id;
    
    @Column(name = "nome")
    private String nome;
    
    @Column(name = "usuario", unique = true)
    private String usuario;
    
    @Column(name = "senha")
    private String senha;
    
    @Enumerated(EnumType.STRING)
    @Column(name = "nivel_de_acesso")
    private NivelDeAcesso nivelDeAcesso;
    
    public enum NivelDeAcesso {ADMINISTRADOR, CONSULTOR};

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public NivelDeAcesso getNivelDeAcesso() {
        return nivelDeAcesso;
    }

    public void setNivelDeAcesso(NivelDeAcesso nivelDeAcesso) {
        this.nivelDeAcesso = nivelDeAcesso;
    }
    
    public boolean isAdministrador() {
        return NivelDeAcesso.ADMINISTRADOR.equals(nivelDeAcesso);
    }
    
    public boolean isConsultor() {
        return NivelDeAcesso.CONSULTOR.equals(nivelDeAcesso);
    }
    
    @Override
    public int hashCode() {
        return (int) getId();
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Usuario) {
            Usuario usuario = (Usuario) obj;
            return usuario.getId() == id;
        }
        return false;
    }
}
